Distributed computing refers to a computing network in which one or more interconnected computing devices co-operate with each other by sharing one or more computational resources (e.g., instances of CPUs, RAM, disk-space, etc). One of the types of distributed computing is volunteer computing in which computer owners can voluntarily donate the computational resources associated with their respective computing devices. For example, the computer owners can help certain projects that require high levels of processing powers and memory usage by sharing these computational resources, when the computing devices associated with these computer owners are in an idle state.
Generally, in a volunteer computing network, one or more requesters request for the computational resources (e.g., for executing the workload/applications) and one or more providers can donate the computational resources in case of availability of the computational resources associated with the computing devices. However, the requesters and the providers in the volunteer computing network are typically decoupled in terms of time (i.e., the requesters and the providers may not be available at the same time to exchange the computational resources), in terms of space (i.e., the requesters and the providers may be located in different parts of the world), and in terms of synchronization (i.e., the requesters may not be blocked till the computational resources are made available). In such a scenario, the problem of sharing computational resources in the volunteer computing network becomes a non-trivial one.